import { TODO_ADD, TODO_CHENCKEDAll, TODO_CLEAR, TODO_DEL, TODO_TYPE, TODO_UPDATEBYID } from "./actionType"

// 更新选中状态
export function updateTodoActionCreator(id) {
    return {
        type: TODO_UPDATEBYID,
        payload: id,
    }
}
// 删除
export function delTodoActionCreator(id) {
    return {
        type: TODO_DEL,
        payload: id,
    }
}

/*
  学习目标：模拟异步Action
*/

/* 模拟异步API的方法 */
function loadNewTodoAPI(params) {
    const newTask = '学习异步Action';
    console.log('2秒后请求成功');
    return new Promise((resolve) => {
        setTimeout(() => {
            console.log('请求成功，数据返回');
            resolve(newTask);
        }, 2000);
    });
}

// 3.1. actionCreator需要返回一个异步函数
export const addTodoActionCreator = (task) => {
    return async (dispatch) => {
        const res = await loadNewTodoAPI();
        // 3.2 使用形参中的dispatch，再次发起action
        dispatch({
            type: TODO_ADD,
            payload: task,
        });
    };
};

// 清除已完成
export function clearTodoAction() {
    return {
        type: TODO_CLEAR
    }
}

// 更改type
export function updateTodoType(myType) {
    return {
        type: TODO_TYPE,
        payload: myType,
    }
}
// 全选
export function checkedAll(isDone) {
    return {
        type: TODO_CHENCKEDAll,
        payload: !isDone,
    }
}